package com.zisu.a996.guava;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import jdk.nashorn.internal.ir.annotations.Immutable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/29 15:46
 * @Version 1.0
 *
 * 不可变集合用法
 */
public class ImmutableTest {
    public static void test(List<Integer> list){
        list.remove(0);
    }

    public void immutable(){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        /**
         * Guava 构件不可变集合对象的三种方式
         **/
        // 1.通过已存在的集合创建
        ImmutableSet<Integer> integers = ImmutableSet.copyOf(list);
        // 2.通过值直接创建不可变集合
        ImmutableSet<Integer> of = ImmutableSet.of(1, 2, 3, 4);
        // 3.以build方式创建不可变集合（追加方式）
        ImmutableSet.builder()
                .add(1)
                .addAll(Sets.newHashSet(1,2,3))
                .add(4)
                .build();

        //使用方式 和 List 一致的（只有添加和删除不支持,这样才能保证一致性）

    }

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        //将list 转成不可变对象保护起来。
        final List<Integer> list1 = Collections.unmodifiableList(list);

        test(list1);
        System.out.println(list1);
    }
}
